package com.newshub.logging.context;

import com.newshub.logging.annotation.LogLevel;
import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 日志上下文
 * 用于携带日志记录的元数据信息
 */
@Data
@Builder
public class LogContext {
    
    /**
     * 业务模块
     */
    private String module;
    
    /**
     * 操作描述
     */
    private String description;
    
    /**
     * 日志级别
     */
    private LogLevel level;
    
    /**
     * 记录时间
     */
    private LocalDateTime timestamp;
    
    /**
     * 请求ID（用于链路追踪）
     */
    private String requestId;
    
    /**
     * 用户ID（未来鉴权系统）
     */
    private String userId;
    
    /**
     * 用户名（未来鉴权系统）
     */
    private String username;
    
    /**
     * 用户角色（未来鉴权系统）
     */
    private String[] roles;
    
    /**
     * 用户权限（未来鉴权系统）
     */
    private String[] permissions;
    
    /**
     * IP地址
     */
    private String ipAddress;
    
    /**
     * 请求URL
     */
    private String requestUrl;
    
    /**
     * 请求方法
     */
    private String requestMethod;
    
    /**
     * 是否已认证
     */
    private Boolean isAuthenticated;
    
    /**
     * 是否已授权
     */
    private Boolean isAuthorized;
    
    /**
     * 方法名
     */
    private String methodName;
    
    /**
     * 类名
     */
    private String className;
    
    /**
     * 方法参数
     */
    private Object[] methodParams;
    
    /**
     * 方法返回值
     */
    private Object methodResult;
    
    /**
     * 执行时间（毫秒）
     */
    private Long executionTime;
    
    /**
     * 异常信息
     */
    private Throwable exception;
    
    /**
     * 扩展元数据
     */
    private Map<String, Object> metadata;
    
    /**
     * 线程ID
     */
    private Long threadId;
    
    /**
     * 线程名称
     */
    private String threadName;
}
